package com.dream.servlet;

import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;

/**
 * @author 匠人码农
 * @date 2020/11/01 17:48
 * 概要：
 *     创建第一个servlet程序
 *     1.servlet程序的实现方式之一（实现servle接口）
 *       1.1 实现servlet接口
 *       1.2 重写servlet接口里的方法
 *       1.3 去web.xml中配置servlet程序的访问地址
 *     2.servlet生命周期
 *       2.1 执行构造器方法
 *       2.2 执行init方法
 *       2.3 执行service方法
 *       2.4 web工程停止的时候，执行destroy方法。
 *     3.servlet程序请求分发处理
 *       3.1 对ServletRequest对象进行强制类型转换。（转成HttpServletRequest）
 *       3.2 通过强转后的对象获取请求方式的值。（getMethod()）
 *       3.3 对获取的请求方式的值进行判断进行业务处理。
 *     4.ServletConfig三个作用
 *       4.1 可以获取Servlet程序别名，即servlet-name的值。
 *       4.2 获取初始化参数值，即init-param。
 *       4.3 获取ServletContext对象
 */
public class HelloServlet implements Servlet {

    /**
     * 构造器
     */
    public HelloServlet(){
        System.out.println("构造器方法被执行了！");
    }

    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        //控制台打印
        System.out.println("HelloServlet的init方法被执行了！");


        // 获取Servlet程序别名
        System.out.println("HeeloServlet程序别名：" + servletConfig.getServletName());

        //获取初始化参数
        System.out.println("====初始化参数如下====");
        System.out.println("初始化参数username = " + servletConfig.getInitParameter("username"));

        //获取servletContext对象
        System.out.println("HelloServlet的servletContext = " + servletConfig.getServletContext());

    }

    @Override
    public ServletConfig getServletConfig() {
        return null;
    }

    /**
     * Servlet要执行的方法
     * @param servletRequest
     * @param servletResponse
     * @throws ServletException
     * @throws IOException
     */

    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        //控制台打印
        System.out.println("HelloServlet的Service方法被执行了！");

        //类型转换
        HttpServletRequest httpServletRequest = (HttpServletRequest)servletRequest;
        //获取请求方式
        String method = httpServletRequest.getMethod();

        //get请求方式处理
        if("get".equalsIgnoreCase(method)){
            doGet();
//            System.out.println("get请求处理！");
        }
        //post请求方式处理
        if("post".equalsIgnoreCase(method)){
            doPost();
//            System.out.println("post请求处理！");
        }



    }

    /**
     * doGet方法处理
     */
    public void doGet(){
        System.out.println("get请求处理！");
    }

    /**
     * doPost方法处理
     */
    public void doPost(){
        System.out.println("post请求处理！");
    }

    @Override
    public String getServletInfo() {
        return null;
    }

    @Override
    public void destroy() {
        //控制台打印
//        System.out.println("HelloServlet的destory方法被执行了！");
    }
}
